Skip to content

feat: add cross-language Spector tests for dollar-sign query params and discriminator without subtypes#10841

Open
iscai-msft wants to merge 7 commits into
microsoft:mainfrom
iscai-msft:feat/cross-language-spector-tests
Open

feat: add cross-language Spector tests for dollar-sign query params and discriminator without subtypes#10841
iscai-msft wants to merge 7 commits into
microsoft:mainfrom
iscai-msft:feat/cross-language-spector-tests

Conversation

@iscai-msft
Copy link
Copy Markdown
Member

Add two new cross-language Spector test scenarios identified from Go and TypeScript emitter bug fixes:

1. Dollar-sign prefixed query parameters (parameters/query/DollarSign)

Tests that emitters correctly handle $-prefixed query parameter names on the wire (e.g. $filter, $top, $skip, $orderby). Common in OData-style APIs.

2. Discriminated type without subtypes (type/model/inheritance/single-discriminator)

Tests a @discriminator-decorated model with no extending subtypes. Emitters should still generate the polymorphic type infrastructure.

Both scenarios include main.tsp definitions, mockapi.ts implementations, and updated spec-summary.md.

@iscai-msft iscai-msft added the lib:http-specs For issues/prs related to the @typespec/http-specs package label May 29, 2026
@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented May 29, 2026

Open in StackBlitz

npm i https://pkg.pr.new/@typespec/http-specs@10841

commit: ad40f3b

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 29, 2026

All changed packages have been documented.

  • @typespec/http-specs
Show changes

@typespec/http-specs - feature ✏️

add test for discriminator model without subtypes and query params with $ prefixes

@azure-sdk-automation
Copy link
Copy Markdown

azure-sdk-automation Bot commented May 29, 2026

You can try these changes here

🛝 Playground 🌐 Website 🛝 VSCode Extension

iscai-msft and others added 4 commits June 1, 2026 11:15
Add DollarSign interface to parameters/query with scenarios for
$filter, $top/$skip, and $orderby query parameters.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add Fish model with @Discriminator but no extending models to
single-discriminator tests. Covers get and put scenarios.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@iscai-msft iscai-msft force-pushed the feat/cross-language-spector-tests branch from 4662678 to 75dc1ee Compare June 1, 2026 15:16
Add parameters/body-root scenario for @bodyRoot nested inside a wrapper
model, testing that emitters resolve the accessor path through the wrapper
(e.g. body.param) rather than referencing the property name directly.

Identified from: Azure/autorest.typescript#3961

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@iscai-msft iscai-msft force-pushed the feat/cross-language-spector-tests branch from 75dc1ee to c630cef Compare June 1, 2026 15:28
iscai-msft added 2 commits June 1, 2026 12:11
@@ -0,0 +1,36 @@
import "@typespec/http";
import "@typespec/spector";
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tadelesh I added a new file and test for body root, since this nested body root didn't fit great into parameters/basic, serialization/json-encoded, or our other inheritance test types. lmk your thoughts!

Comment on lines +33 to +35
body: {
@bodyRoot bodyRootParameters: BodyRootModel;
},
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is a very weird usage. Can we discuss if this is a good practice first?

Comment on lines +43 to +77
@scenario
@scenarioDoc("""
Send a request with `$top` and `$skip` query parameters.

Expected query parameters:
- `$top` = 10
- `$skip` = 5

Expected response status code: 204
""")
@route("/top-and-skip")
@get
topAndSkip(
@query("$top")
top: int32,

@query("$skip")
skip: int32,
): void;

@scenario
@scenarioDoc("""
Send a request with a `$orderby` query parameter.

Expected query parameter:
- `$orderby` = "name asc"

Expected response status code: 204
""")
@route("/orderby")
@get
orderby(
@query("$orderby")
orderby: string,
): void;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These two operations seem duplicate with the first one.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lib:http-specs For issues/prs related to the @typespec/http-specs package

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants